# -*- coding: utf-8 -*-
from django.contrib.auth.models import User
from django.db import models
from django.db.models.fields import *
from string import capitalize
from legendofkrouzt.mapa.models import Cidade

PEQUENO = 'p'
MEDIO = 'm'
GRANDE = 'g'
ENORME = 'e'

TAMANHO_CHOICES = ( 
        (PEQUENO,'Pequeno'),
        (MEDIO,'Médio'),
        (GRANDE,'Grande'),
        (ENORME,'Enorme')
)

INTELIGENCIA = 'i'
FORCA = 'f'
AGILIDADE = 'a'

HABILIDADE_CHOICES = (
        (INTELIGENCIA,'Inteligência'),
        (FORCA,'Força'),
        (AGILIDADE,'Agilidade')
)


class Base(models.Model):
    
    class Meta:
        abstract = True
    
    descricao = models.CharField(max_length=200,blank=True, null=True)
    nome = models.CharField(max_length=32, unique=True)
    hp = models.IntegerField(blank=True, null=True)
    mp = models.IntegerField(blank=True, null=True)
    forca = models.IntegerField(blank=True, null=True)
    inteligencia = models.IntegerField(blank=True, null=True)
    agilidade = models.IntegerField(blank=True, null=True)
    constituicao = models.IntegerField(blank=True, null=True)

class Habilidade(models.Model):
    nome = models.CharField(max_length=32)
    descricao = models.CharField(max_length=32,blank=True, null=True)
    atributo_bonus = models.CharField(
                max_length=1,
                default = INTELIGENCIA,
                choices = HABILIDADE_CHOICES
    )
    valor_bonus = models.IntegerField(blank=True, null=True)
    atributo_dano = models.CharField(
                max_length=1,
                default = INTELIGENCIA,
                choices = HABILIDADE_CHOICES
    )
    valor_dano = models.IntegerField(blank=True, null=True)
    
    def __unicode__(self):
        return capitalize(self.nome)

class Classe(Base):
    pass

    def __unicode__(self):
        return capitalize(self.nome)
    
    @classmethod
    def buscarClasse(self, id):
        """
            busca a classe no banco de dados
        """
        
        try:
            classe = self.objects.filter(pk=id)
            return classe
        except:
            return None
    
class Raca(Base):
    habilidades = models.ForeignKey('Habilidade')
    tamanho = models.CharField(
                max_length=1,
                default=PEQUENO,
                choices=TAMANHO_CHOICES
    )
    
    def __unicode__(self):
        return capitalize(self.nome)
    
    @classmethod
    def buscarRaca(self, id):
        """
            busca a raça no banco de dados
        """
        
        try:
            raca = self.objects.filter(pk=id)
            return raca
        except:
            return None
        

class Personagem(Base):
    nivel = models.IntegerField(blank=True, null=True, default=0)
    ouro = models.IntegerField(blank=True, null=True, default=0)
    usuario = models.ForeignKey(User)
    raca = models.ForeignKey('Raca')
    classe = models.ForeignKey('Classe')
    mp_atual = models.IntegerField(blank=True, null=True)
    hp_atual = models.IntegerField(blank=True, null=True)
    avatar = models.CharField(max_length=70, blank=True, null=True)
    img_personagem = models.CharField(max_length=70, blank=True, null=True)
    mapa = models.ForeignKey(Cidade)
    
    def __unicode__(self):
        return capitalize(self.nome)
    
    @classmethod
    def buscarPersonagem(self, parametro):
        """
            busca o personagem pelo começo do parametro passado
        """
        personagem = Personagem.objects.filter(nome__icontains=parametro)
        return personagem

